package com.itheima.controller;

import com.itheima.pojo.Sif;
import com.itheima.pojo.Result;
import com.itheima.service.SifService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.List;

// 通量接口
@RestController
@RequestMapping("/sif")
public class SifController {
    @Autowired
    private SifService sifService;

    // 上传通量数据接口
    @PostMapping("/uploadData")
    public Result uploadData(@RequestParam("excelFile") MultipartFile file) {
        // 检查上传的文件是否为空
        if (file == null || file.isEmpty()) {
            return Result.error("上传的文件不存在或为空");
        }

        try (InputStream inputStream = file.getInputStream()) {
            // 使用ExcelUtil类读取Excel文件内容并转换为List<Sif>
            List<Sif> sifList = com.itheima.utils.SifExcelUtil.readExcel(inputStream);
            // 遍历List<Sif>，将数据存储到数据库中
            for (Sif sif : sifList) {
                // 检查数据库中是否有与当前sif的timestamp相同的数据

                Sif existingSif = sifService.findSifByTimestamp(sif.getTimestamp());

                if (existingSif == null) {
                    System.out.println("该条数据不存在并插入:"+sif);

                    // 如果不存在则插入数据
                    sifService.add(sif);
                }
            }

            return Result.success("文件上传成功，数据已存储");

        } catch (IOException e) {
            return Result.error("文件读取的时候失败: " + e.getMessage());
        } catch (Exception e) {
            return Result.error("数据处理的时候失败: " + e.getMessage());
        }
    }

    // 查询某个时间段数据接口
    @GetMapping("/findSifByTimeRange")
    public Result<List<Sif>> findSifByTimeRange(
            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) {
        List<Sif> list = sifService.findSifByTimeRange(startTime, endTime);
        return Result.success(list);
    }

    // 查询数据库中现有数据的最新日期的当天的全部数据
    @GetMapping("/findSifInLatestDayData")
    public Result<List<Sif>> findSifInLatestDayData(){
        List<Sif> list = sifService.findSifInLatestDayData();
        return Result.success(list);
    }
}